<?php
/*
    方倍工作室 http://www.cnblogs.com/txw1958/
    CopyRight 2013 www.fangbei.org  All Rights Reserved
*/
header('Content-type:text');//???
define("TOKEN", "weixin");//设置Token
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {//如果获取到随机数，说明微信或者方倍在进行token验证
    $wechatObj->valid();//核对签名，如果随机数和自己根据哈希加密得到随机数相当，则原样返回随机数。
}else{//上面进行了一次token认证，之后就可以调用微信公众平台或者测试平台的接口了
	//http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
	//如果上面没有没有token认证或者认证失败，那么下面发送信息就不会起作用。
    $wechatObj->responseMsg();
}//认证成功之后，即else的内容，发送的信息就可以使用responseMsg()函数处理了。

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];//获取随机字符串
        if($this->checkSignature()){
            header('content-type:text');//似乎返回信息之前必须要有
            echo $echoStr;//请原样返回echostr参数内容
            exit;//退出
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];//获取微信发送的证书
        $timestamp = $_GET["timestamp"];//获取时间戳
        $nonce = $_GET["nonce"];//获取随机数

        $token = TOKEN;//赋值给token
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr, SORT_STRING);//排序
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );//哈希加密

        if( $tmpStr == $signature ){//如果哈希加密结果和获取到的证书相等。
            return true;//相等返回true
        }else{
            return false;//不相等返回false
        }
    }

   } 
?>


